V dnešní lekci si vysvětlíme poněkud náročnější záležitost - smyčky. Ale nejdříve zadání úkolu. Naším přáním je vygenerovat následující květ sedmikrásky.

Lístek květu vytvoříme filtrem Droplet (kapka) a střed filtrem Round (kolečko). Nejjednodušší by zřejmě bylo použít několikrát filtr pro rotaci Rotate a lístky poté spojit. Nebo, pokud by byl květ symetrický, vygenerovat část a zbytek zrcadlit. Ale co když má být počet lístků proměnlivý? Nebo co když květ není symetrický? V takovém případě je čas na PROGRAMOVOU SMYČKU!
Nejdříve popis principu smyčky. Použiji zjednodušený obrázek z helpu. V helpu si můžete o smyčce přečíst další podrobnosti.

Smyčka začíná na levé straně filtrem LoopBegin (ze skupiny Podpora). Jeho vstup Source určuje výchozí pozadí, na které se grafika uvnitř smyčky vykresluje. Výstup filtru LoopBegin vstupuje do filtrů pro vykreslování obrazu. V tomto případě je ve vykreslovací větvi jediný filtr, Star. Vykreslovací větev uvnitř smyčky je opakovaně volána při každém iteračním kroku smyčkou. Úkolem vykreslovací větve je přidat při každém průchodu do obrazu svou část grafiky. Aby se však obraz nevykresloval stále stejným způsobem, potřebuje vykreslovací smyčka znát, ve kterém iteračním kroku se nachází. To zajišťuje filtr LoopIndex (ze skupiny Podpora), jehož vstup je napojen na výstup filtru LoopBegin. Na výstupu filtru LoopIndex se během iterací postupně zvyšuje hodnota od 0 po 1 a představuje relativní fázi iteračního kroku. To znamená - je-li smyčka nastavena na 5 kroků (počet průchodů smyčkou se nastavuje parametrem Loops filtru LoopBegin), navrací filtr LoopIndex na svém výstupu hodnoty 0, 0.25, 0.5, 0.75 a 1. Výstupem filtru LoopIndex se zde řídí otáčení a jas hvězdy. Renderovací smyčka je zakončena filtrem LoopEnd (skupina Podpora). Filtr LoopEnd na svém vstupu získává obraz od vykreslovací větve filtrů uvnitř smyčky. Výsledný sestavený obraz poskytuje na svém výstupu. Současně je výstup filtru LoopEnd veden zpět na začátek smyčky do vstupu LoopEnd filtru LoopBegin.
A zde je sestavený generátor květu (obrázek je rozdělen na 2 části, levou a pravou). Podrobnější popis a rozbor bude následovat.


Smyčka je zahájena na levé straně filtrem LoopBegin (skupina Podpora) a zakončena na pravé straně filtrem LoopEnd (skupina Podpora). Z obrázků to není příliš patrné, ale výstup filtru LoopEnd je veden zpět na vstup LoopEnd filtru LoopBegin. Za filtrem LoopBegin následuje filtr Droplet (skupina Výplně), který generuje jeden lístek květu. U filtru Droplet změňte barvu Color i Background na bílou, Width na 10, Height na 20 a ShiftY na -25. Výstup Droplet směřuje do vstupu Source filtru Rotate (skupina Transformace). Do vstupu Angle filtru Rotate je napojen výstup filtru LoopIndex (ze skupiny Podpora), jehož vstup je napojen na výstup filtru LoopBegin. Filtry LoopIndex a Rotate zajišťují otáčení lístku květu, v každém iteračním kroku jinak.
Všimněte si ve výsledném obazu, že květ má jenom 9 lístků, přitom počet iteračních kroků (vstup Loops filtru LoopBegin) je nastaven na 10. Je to proto, že první iterační krok navrací ve filtru LoopIndex výstupní hodnotu 0 a poslední iterační krok hodnotu 1. U filtru Rotate představuje rotace 0 úhel otočení 0° a rotace 1 je úhel otočení 360°. Díky tomu se první a poslední lístek překrývají přes sebe a je vidět jen jeden. V některých případech by to mohlo vadit - v tom případě by bylo nutné zmenšit výstupní rozsah hodnot LoopIndex vynásobením menší hodnotou.
Po otočení lístku na správnou pozici se lístek přidá k sestavovanému obrazu pomocí filtru Blend. Okolí lístku je průhledné (je to znázorněno čtverečkovanou sítí) a proto je lístek s obrazem sloučen bez nutnosti používat jiné blendovací módy. Po sloučení obrazu je obraz veden do vstupu filtru LoopEnd, který smyčku zakončí. Filtr LoopEnd funguje jako akumulátor obrazu. Po každém průchodu smyčkou si uchová sestavený obraz a vede ho zpět do filtru LoopBegin na začátku smyčky jako podkladový obraz pro další iterační krok.
Obraz je dále veden na vstup Background filtru Round (skupina Výplně), který do obrazu přidá kolečko středu květu. Vstup Color květu je nastaven na žlutou barvu, parametry Width a Height na 10 (rozměr kolečka) a parametr Bevel na 20 (zjemnění hrany). Výstup z filtru Round je veden do vstupu výstupního filtru Out.
Možná by vás mohlo napadnout - a co takhle uvnitř smyčky rotovat ne květ, ale podkladový obraz pod květem? Bohužel transformace podkladového obrazu uvnitř smyčky nejsou z principu možné. Smyčka během iterací pracuje vždy pouze s jedním renderovaným bodem, který opakovaně střádá na výstupu a vrací zpět na vstup. Není možné aby při vnitřních operacích přešla na jinou souřadnici bodu. Proto souřadnice obrazu na výstupu se musí shodovat se souřadnicemi obrazu na vstupu. Je-li potřeba obraz transformovat (tj.posouvat, otáčet), je nutné takové operace provádět s přidávaným obrazem a ne s podkladem.